home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / makmenu2.zip / QWIKSORT.BAS < prev    next >
BASIC Source File  |  1989-08-08  |  1KB  |  53 lines

  1. DEFINT A-Z
  2.  
  3. SUB QwikSort (Kee$(), RecIndex%(), NData%)
  4.  
  5. ' Procedure to perform a non-recursive QuickSort
  6.  
  7. STATIC Left%, Right%, I%, J%, Median$, Stack%
  8. DIM LStack%(50), RStack%(50)
  9.  
  10. ' Initialize record indices for the keys
  11. Stack.Height% = 1: LStack%(1) = 1: RStack%(1) = NData%
  12.  
  13. DO
  14.    Left% = LStack%(Stack.Height%)
  15.    Right% = RStack%(Stack.Height%)
  16.    Stack.Height% = Stack.Height% - 1
  17.  
  18.    DO
  19.       I% = Left%: J% = Right%
  20.       Median$ = Kee$(RecIndex%((Left% + Right%) \ 2))
  21.       DO
  22.  
  23.         WHILE Kee$(RecIndex%(I%)) < Median$
  24.           I% = I% + 1
  25.         WEND
  26.  
  27.         WHILE Median$ < Kee$(RecIndex%(J%))
  28.           J% = J% - 1
  29.         WEND
  30.     
  31.         IF I% <= J% THEN
  32.            SWAP RecIndex%(I%), RecIndex%(J%)
  33.            I% = I% + 1: J% = J% - 1
  34.         END IF
  35.     
  36.       LOOP WHILE I% <= J%
  37.           
  38.       IF I% < Right% THEN
  39.          Stack.Height% = Stack.Height% + 1
  40.          LStack%(Stack.Height%) = I%
  41.          RStack%(Stack.Height%) = Right%
  42.       END IF
  43.       Right% = J%
  44.  
  45.    LOOP WHILE Left% < Right%
  46.  
  47. LOOP WHILE Stack.Height% <> 0
  48.  
  49. ERASE LStack%, RStack%
  50.  
  51. END SUB
  52.  
  53.